![]() |
GX 05 - QuickDraw GX Ç…ÇÊÇÈ EPS ÇÃÉTÉ|Å[Ég(95 îN 5 åé 1 ì˙): çXêV
Q: QuickDraw GX Çégǡǃ EPS ÉtÉ@ÉCÉãÇÉTÉ|Å[ÉgÇ∑ÇÈÇΩÇflÇÃê≥ǵǢï˚ñ@Çã≥ǶǃÇ≠ÇæÇ≥Ç¢ÅB
A: PostScript ÇÃÉVÉmÉjÉÄÇégǧÇΔÇ´Ç…ÇÕïKóvÇ≈Ç∑ÅBì¡Ç…ÅAQD ÇÃç¿ïWãÛä‘Ççló∂Ç…ì¸ÇÍǃǮÇ≠ïKóvǙdžÇËÇ‹Ç∑ÅBQD Ç≈ÇÕÅA
DZÇÃñ‚ëËÇàµÇ§Ç…ÇÕÅAëΩêîÇÃï˚ñ@ǙdžÇËÇ‹Ç∑ÅBǪÇà 1 ǬDžÅA 0 760 translate 1 -1 scale newpathDZǧÇ∑ÇÍÇŒÅAécÇËÇà PostScript ÉRÅ[ÉhÇÕÅAǪÇÃNjNjëóêMÇ≈Ç´Ç‹Ç∑ÅBÇΩÇæÇµÅAGX ÉIÉuÉWÉFÉNÉgÇï`âÊÇ∑ÇÈëOÇ…ÇÕÅA translate Ç®ÇÊÇ— scale ââéZÇÃå¯â Çå≥Ç…ñflÇ∑DZÇΔÇñYÇÍǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅBǪǧǵǻǢÇΔÅAGX ÉIÉuÉWÉFÉNÉgÇÃìVínÇÕãtDžǻǡǃǵNjǢNjÇ∑ÅB
Q: Ç≤éwìEÇÃï˚ñ@ÇÕÅAÉÜÅ[ÉUÇ… EPS ÇÃÉGÉNÉXÉ|Å[ÉgÇÇ≥ÇπǻǢDZÇΔÇëOíÒÇ…Ç∑ÇÍÇŒÅAÇΩǵǩDžëΩÇ≠ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇëŒè€Ç… QuickDraw GX Ç≈ EPS ÇÉTÉ|Å[ÉgÇ∑ÇÈï˚ñ@ÇΔǵǃê\ǵï™Ç†ÇËÇ‹ÇπÇÒÅBǵǩǵÅAEPS Çà íuÇ…àÀë∂ǵǻǢÉVÉFÉCÉv (íPí≤âªÇ≥ÇÍÇΩÉsÉNÉ`ÉÉÅEÉVÉFÉCÉvÇÃàÍïîÇΔǵǃ) ÇΔǵǃÉTÉ|Å[ÉgÇ∑ÇÈïKóvǙdžÇÈÇÃÇ≈Ç∑ÅBéüÇ…é¶Ç∑ï˚ñ@ÇÕÅAÉyÅ[ÉWÇÃçÇÇ≥Ç™ÇÌǩǡǃǢÇÈDZÇΔÇëOíÒDžǵǃǢÇÈÇΩÇflÅAÉAÉvÉäÉPÅ[ÉVÉáÉìä‘ (ÇΩÇΔǶnjÅA
A: Apple Ç≈ÇÕÅA
DZÇÍÇÁ 2 ǬÇÃèCê≥ÇÕÅAî‰ärìIä»íPÇ…ÉCÉìÉvÉäÉÅÉìÉgÇ≈Ç´ÇÈÇÕÇ∏Ç≈Ç∑ÅB ÉãÅ[É`Éì: EPSFileToShape
EPS ÉtÉ@ÉCÉãÇì«Ç›çûÇ›ÅAǪÇÃäOïîÇ…ÉVÉFÉCÉvÇçÏê¨ÇµÇ‹Ç∑ÅBǪÇÃíÜÇ… PICT ÉäÉ\Å[ÉXÇ™ä‹Ç‹ÇÍǃǢÇÈèÍçáÅAǪÇÍÇÕ Skia Ç…ïœä∑Ç≥ÇÍÇ‹Ç∑ÅBÇ‹ÇΩÅAPICT ÉäÉ\Å[ÉXÇ™ä‹Ç‹ÇÍǃǢǻǢèÍçáÅAéläpå`ÇÃÉVÉFÉCÉvÇÕÅA0,0 ÇãNì_ÇΔǵǃÅAEPS Çà BoundingBox:: ÉRÉÅÉìÉgÇ©ÇÁìæÇÁÇÍÇΩã´äEÉ{ÉbÉNÉXÇÃïùÇΔçÇÇ≥Ç…Ç»ÇËÇ‹Ç∑ÅB
Ç¢Ç∏ÇÍÇÃÉPÅ[ÉXÇ≈LJÅAEPS ÉtÉ@ÉCÉãÇÕÅA 'post' É^ÉOÅEÉVÉmÉjÉÄÇΔÇΔLJDžÉVÉFÉCÉvÇ…ÉAÉ^ÉbÉ`Ç≥ÇÍÇ‹Ç∑ÅB
DZÇÃÇÊǧDžǵǃí«â¡Çà PostScript Ç™ÉAÉ^ÉbÉ`Ç≥ÇÍÅASkia-PostScript Imaging System ÇâÓǵǃàÛç¸ÇçsǧÇΔǴDžLJÅAPostScript Ç™ÉVÉFÉCÉvÇÃïœå`ÇåoóRǵǃìKêÿÇ…ÉåÉìÉ_ÉäÉìÉOÇçsǶÇÈÇÊǧDžǻÇËÇ‹Ç∑ (Ç‡ÇøÇÎÇÒÅADZDZÇ≈è⁄ǵǢDZÇΔÇê‡ñæÇ∑ÇÈÇÌÇØÇ…ÇÕǢǴNjÇπÇÒÇ™)ÅB DZÇÃÇΩÇflÇÃÉAÉãÉSÉäÉYÉÄÇÕÅAÅwPostScript Language Reference ManualÅx(2nd edition) Çà 724 ÉyÅ[ÉWÇ…ãLç⁄Ç≥ÇÍǃǢNjÇ∑ÅB
/******************************************************/ gxShape EPSFileToShape(Str255 fName, short vRefNum) { OSErr status; PicHandle thePict; Rect theRect; Point patStretch = {1,1}; gxShape theShape = nil; short refNum; gxTag synTag; long size; Handle hPsData; long startComment, endComment; Str32 num1; char tagString[300]; long tagSize, pieceSize; gxTranslationStatistic seanStats; /** PostScript ÉfÅ[É^ÇéÊìæ **/ status = FSOpen(fName, vRefNum, &refNum); ncheck(status); GetEOF(refNum, &size); hPsData = NewHandle(size); HLock(hPsData); /** EPS ÉtÉ@ÉCÉãëSëÃÇì«Ç›çûÇfi **/ status = FSRead(refNum, &size, *hPsData); ncheck(status); FSClose(refNum); /** ã´äEÉ{ÉbÉNÉXÇÃÉRÉÅÉìÉgÇåüçı (êîílÇÃÇ›) **/ startComment = Munger(hPsData, 0, "%%BoundingBox:", 14, nil, 0) + 14; endComment = Munger(hPsData , startComment, "\n", 1, nil, 0); refNum = OpenRFPerm(fName, vRefNum, 0); thePict = (PicHandle)GetResource('PICT', 256); if (thePict != nil) { theRect = (*thePict)->picFrame; theShape = GXNewShape(gxPictureType); (void) GXConvertPICTToShape(thePict, gxDefaultOptionsTranslation, &theRect, &theRect, patStretch, theShape, &seanStats); status = GXGetGraphicsError(nil); ncheck(status); ReleaseResource((Handle)thePict); } else { float x1, y1, x2, y2; gxRectangle theRectangle; sscanf(*hPsData + startComment, "%f %f %f %f", &x1, &y1, &x2, &y2); theRectangle.top = 0; theRectangle.left = 0; theRectangle.right = X2Fix(x2 - x1); theRectangle.bottom = X2Fix(y2 - y1); /** ñÑÇflçûÇ› PostScript ÇÃå¥ì_ïœä∑ÇÃÇΩÇflÇ… QuickDraw ÇÃéläpå`Ç™ïKóv **/ theRect.top = 0; theRect.left = 0; theRect.bottom= theRectangle.bottom >> 16; theRect.right = theRectangle.right >> 16; theShape = GXNewRectangle(&theRectangle); }//end if CloseResFile(refNum); /** QuickDraw éläpå`Çà Left Bottom Ç…ïœä∑ **/ tagSize = 0; NumToString(theRect.left, num1); num1[(unsigned char)num1[0] + 1] = ' '; pieceSize = (unsigned char)num1[0] + 1; BlockMove(&(num1[1]), tagString, pieceSize); tagSize += pieceSize; NumToString(theRect.bottom, num1); pieceSize = (unsigned char)num1[0]; BlockMove(&(num1[1]), tagString + tagSize, pieceSize); tagSize += pieceSize; BlockMove(" translate\n", tagString + tagSize, 11); tagSize += 11; /** ç¿ïWé≤ÇîΩì] **/ BlockMove(" 1 -1 scale\n", tagString + tagSize, 12); tagSize += 12; synTag = GXNewTag( gxPostScriptTag, tagSize, tagString); GXSetShapeTags(theShape, gxPostScriptTag, 0, 0, 1, &synTag); GXDisposeTag(synTag); /** -(LLx) -(LLy) Ç…ïœä∑ **/ // ÉIÉyÉâÉìÉh•ÉXÉ^ÉbÉNè„ÇÃÉIÉyÉâÉìÉh•ÉRÉÅÉìÉg ï∂éöóÒÇ©ÇÁìæÇΩ 4 ǬÇÃÉ{ÉbÉNÉXî‘çÜ synTag = GXNewTag( gxPostScriptTag, endComment - startComment + 1, *hPsData + startComment); GXSetShapeTags(theShape, gxPostScriptTag, 0, 0, 1, &synTag); GXDisposeTag(synTag); // å„Çà 2 ǬÇÉ|ÉbÉvǵÅAç≈èâÇà 2 ǬÇïâÇÃêîÇ…ïœä∑ synTag = GXNewTag( gxPostScriptTag, 36, "pop pop neg exch neg exch translate\n"); GXSetShapeTags(theShape, gxPostScriptTag, 0, 0, 1, &synTag); GXDisposeTag(synTag); /** PostScript ÉVÉmÉjÉÄñ{ëà **/ synTag = GXNewTag( gxPostScriptTag, size, *hPsData); GXSetShapeTags(theShape, gxPostScriptTag, 0, 0, 1, &synTag); GXDisposeTag(synTag); DisposHandle(hPsData); check(theShape); return(theShape); }//EPSFileToShape [ Technical Q&A's : QuickDraw GX : GX Graphics : GX05 ] |
![]() |